{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "cdmuMK_1--4j"
   },
   "outputs": [],
   "source": [
    "# Install condacolab\n",
    "!pip install -q condacolab\n",
    "import condacolab\n",
    "condacolab.install()\n",
    "\n",
    "!conda create -n internvl python=3.9 -y\n",
    "\n",
    "!source activate internvl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "KWmqqybo_h_f"
   },
   "outputs": [],
   "source": [
    "!git clone https://github.com/Czi24/InternVL-20240714.git\n",
    "!pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118\n",
    "\n",
    "!pip install flash-attn==2.3.6 --no-build-isolation\n",
    "!pip install transformers==4.37.2\n",
    "!pip install opencv-python termcolor yacs pyyaml scipy\n",
    "!pip install deepspeed==0.13.5\n",
    "!pip install pycocoevalcap tqdm\n",
    "\n",
    "%cd /content/InternVL-20240714/internvl_chat_llava/\n",
    "!pip install -e ."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "id": "PVGCUM6gXijH",
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 357,
     "referenced_widgets": [
      "23b2551bf1534455be6089f6cb561c14",
      "349ef084cd784aabac3cc230cf015973",
      "274d40f303c7454193f712253fca82db",
      "4dd3619e5efc4ba58f68c45862366c94",
      "4a0a9fa4d94c4f3fbd2b8ba7c82aed06",
      "dd2343f590fa402a936b3945568a4df8",
      "aef2e294b5d443f899bb7aed9e88053d",
      "ddb8ccbd1d904d1d8dff9cc5a41a59ed",
      "ae946ea039e7455dae0d21e9bfdefc8c",
      "216805c6420d4ad5baacf47cb91f9588",
      "faf4c7f71d8d44db91ef6e50a9f31945"
     ]
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1721047539407,
     "user_tz": -480,
     "elapsed": 3361,
     "user": {
      "displayName": "linrui xu",
      "userId": "17232213947858556138"
     }
    },
    "outputId": "7275b744-253f-4963-9d96-3d4c76f3b5e1"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.10/site-packages (0.23.4)\n",
      "Requirement already satisfied: protobuf in /usr/local/lib/python3.10/site-packages (5.27.2)\n",
      "Requirement already satisfied: filelock in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (3.13.1)\n",
      "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (2024.6.1)\n",
      "Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (23.2)\n",
      "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (6.0.1)\n",
      "Requirement already satisfied: requests in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (2.31.0)\n",
      "Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (4.66.1)\n",
      "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/site-packages (from huggingface_hub) (4.9.0)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/site-packages (from requests->huggingface_hub) (3.3.2)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/site-packages (from requests->huggingface_hub) (3.6)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/site-packages (from requests->huggingface_hub) (2.1.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/site-packages (from requests->huggingface_hub) (2023.11.17)\n",
      "\u001B[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001B[0m\u001B[33m\n",
      "\u001B[0m/content\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "Fetching 22 files:   0%|          | 0/22 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "23b2551bf1534455be6089f6cb561c14"
      }
     },
     "metadata": {}
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "'/content/Mini-InternVL-Chat-2B-V1-5'"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "string"
      }
     },
     "metadata": {},
     "execution_count": 31
    }
   ],
   "source": [
    "!pip install huggingface_hub protobuf\n",
    "from huggingface_hub import snapshot_download\n",
    "%cd /content\n",
    "snapshot_download(repo_id=\"OpenGVLab/Mini-InternVL-Chat-2B-V1-5\", local_dir=\"Mini-InternVL-Chat-2B-V1-5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 1098,
     "status": "ok",
     "timestamp": 1721047553179,
     "user": {
      "displayName": "linrui xu",
      "userId": "17232213947858556138"
     },
     "user_tz": -480
    },
    "id": "WyBkhCxuAZmB",
    "outputId": "babe04c2-7c2d-4488-a4c7-d6c27011d520"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "/content/InternVL-20240714/internvl_chat_llava\n"
     ]
    }
   ],
   "source": [
    "%cd /content/InternVL-20240714/internvl_chat_llava/\n",
    "import threading\n",
    "import subprocess\n",
    "\n",
    "# start Controller\n",
    "threading.Thread(\n",
    "    target=lambda: subprocess.run(\n",
    "        ['python3', '-m', 'llava.serve.controller', '--host', '0.0.0.0', '--port', '10000'],\n",
    "        check=True\n",
    "    ),\n",
    "    daemon=True\n",
    ").start()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "id": "_nntly26Afoe",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1721047556590,
     "user_tz": -480,
     "elapsed": 869,
     "user": {
      "displayName": "linrui xu",
      "userId": "17232213947858556138"
     }
    },
    "outputId": "f1cf4a98-773c-4809-fcb4-2b1156fa3d2f"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "/content/InternVL-20240714/internvl_chat\n"
     ]
    }
   ],
   "source": [
    "%cd /content/InternVL-20240714/internvl_chat\n",
    "import threading\n",
    "import subprocess\n",
    "\n",
    "# Define the command to run the model worker\n",
    "command = [\n",
    "    'python3', '-m', 'internvl.serve.model_worker',\n",
    "    '--host', '0.0.0.0',\n",
    "    '--controller', 'http://localhost:10000',\n",
    "    '--port', '40001',\n",
    "    '--worker', 'http://localhost:40001',\n",
    "    '--model-path', '/content/Mini-InternVL-Chat-2B-V1-5'\n",
    "]\n",
    "\n",
    "# Run the command in a separate thread\n",
    "thread = threading.Thread(\n",
    "    target=lambda: subprocess.run(command, check=True, shell=False),\n",
    "    daemon=True\n",
    ")\n",
    "thread.start()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "id": "qDdFnrwjBJp4",
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "status": "ok",
     "timestamp": 1721047607455,
     "user_tz": -480,
     "elapsed": 48095,
     "user": {
      "displayName": "linrui xu",
      "userId": "17232213947858556138"
     }
    },
    "outputId": "674e36db-b209-45f6-ec40-bff0dfd13b20"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "/content/InternVL-20240714/internvl_chat_llava\n",
      "2024-07-15 12:46:03 | INFO | gradio_web_server | args: Namespace(host='0.0.0.0', port=None, controller_url='http://localhost:10000', concurrency_count=10, model_list_mode='reload', share=True, moderate=False, embed=False)\n",
      "2024-07-15 12:46:03 | INFO | gradio_web_server | Models: ['Mini-InternVL-Chat-2B-V1-5']\n",
      "2024-07-15 12:46:03 | INFO | gradio_web_server | Namespace(host='0.0.0.0', port=None, controller_url='http://localhost:10000', concurrency_count=10, model_list_mode='reload', share=True, moderate=False, embed=False)\n",
      "2024-07-15 12:46:03 | INFO | stdout | Running on local URL:  http://0.0.0.0:7860\n",
      "2024-07-15 12:46:04 | INFO | stdout | Running on public URL: https://0925111111d5cd1ae1.gradio.live\n",
      "2024-07-15 12:46:04 | INFO | stdout | \n",
      "2024-07-15 12:46:04 | INFO | stdout | This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)\n",
      "2024-07-15 12:46:21 | INFO | gradio_web_server | load_demo. ip: 172.31.31.243\n",
      "2024-07-15 12:46:21 | INFO | gradio_web_server | Models: ['Mini-InternVL-Chat-2B-V1-5']\n",
      "2024-07-15 12:46:21 | ERROR | stderr | Traceback (most recent call last):\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/gradio/routes.py\", line 436, in run_predict\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     with utils.MatplotlibBackendMananger():\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/gradio/utils.py\", line 794, in __exit__\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     matplotlib.use(self._original_backend)\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/matplotlib/__init__.py\", line 1255, in use\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     plt.switch_backend(name)\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/matplotlib/pyplot.py\", line 415, in switch_backend\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     module = backend_registry.load_backend_module(newbackend)\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/matplotlib/backends/registry.py\", line 323, in load_backend_module\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     return importlib.import_module(module_name)\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"/usr/local/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n",
      "2024-07-15 12:46:21 | ERROR | stderr |     return _bootstrap._gcd_import(name[level:], package, level)\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1050, in _gcd_import\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1027, in _find_and_load\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 992, in _find_and_load_unlocked\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 241, in _call_with_frames_removed\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1050, in _gcd_import\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1027, in _find_and_load\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 992, in _find_and_load_unlocked\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 241, in _call_with_frames_removed\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1050, in _gcd_import\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1027, in _find_and_load\n",
      "2024-07-15 12:46:21 | ERROR | stderr |   File \"<frozen importlib._bootstrap>\", line 1004, in _find_and_load_unlocked\n",
      "2024-07-15 12:46:21 | ERROR | stderr | ModuleNotFoundError: No module named 'ipykernel'\n",
      "2024-07-15 12:46:25 | INFO | gradio_web_server | load_demo. ip: 172.31.31.243\n",
      "2024-07-15 12:46:25 | INFO | gradio_web_server | Models: ['Mini-InternVL-Chat-2B-V1-5']\n",
      "2024-07-15 12:46:28 | INFO | gradio_web_server | add_text. ip: 172.31.31.243. len: 41\n",
      "2024-07-15 12:46:30 | INFO | gradio_web_server | http_bot. ip: 172.31.31.243\n",
      "2024-07-15 12:46:30 | INFO | gradio_web_server | template: internlm2-chat\n",
      "2024-07-15 12:46:30 | INFO | gradio_web_server | model_name: Mini-InternVL-Chat-2B-V1-5, worker_addr: http://localhost:40001\n",
      "2024-07-15 12:46:30 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:30 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:30 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:30 | INFO | gradio_web_server | ==== request ====\n",
      "{'model': 'Mini-InternVL-Chat-2B-V1-5', 'prompt': '<|im_start|>system\\nYou are an AI assistant whose name is InternLM (书生·浦语).<|im_end|><|im_start|>user\\n<image>\\nHow many dogs are in the figure, and why?<|im_end|><|im_start|>assistant\\n', 'temperature': 0.8, 'top_p': 0.7, 'max_new_tokens': 1024, 'max_input_tiles': 12, 'stop': '<|im_end|>', 'images': \"List of 1 images: ['d9757b813f65be486affa59ec9739cba']\", 'org_images': \"List of 1 images: ['d9757b813f65be486affa59ec9739cba']\"}\n",
      "2024-07-15 12:46:30 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:30 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:31 | INFO | gradio_web_server | There are two dogs in the figure. This can be inferred from the presence of two dogs, each reflected in a mirror.\n",
      "2024-07-15 12:46:31 | INFO | stdout | image_process_mode: Default\n",
      "2024-07-15 12:46:46 | ERROR | stderr | Traceback (most recent call last):\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/gradio/blocks.py\", line 2058, in block_thread\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     time.sleep(0.1)\n",
      "2024-07-15 12:46:46 | ERROR | stderr | KeyboardInterrupt\n",
      "2024-07-15 12:46:46 | ERROR | stderr | \n",
      "2024-07-15 12:46:46 | ERROR | stderr | During handling of the above exception, another exception occurred:\n",
      "2024-07-15 12:46:46 | ERROR | stderr | \n",
      "2024-07-15 12:46:46 | ERROR | stderr | Traceback (most recent call last):\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/runpy.py\", line 196, in _run_module_as_main\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     return _run_code(code, main_globals, None,\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/runpy.py\", line 86, in _run_code\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     exec(code, run_globals)\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/content/InternVL-20240714/internvl_chat_llava/llava/serve/gradio_web_server.py\", line 452, in <module>\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     demo.queue(\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/gradio/blocks.py\", line 1975, in launch\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     self.block_thread()\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/site-packages/gradio/blocks.py\", line 2060, in block_thread\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     print(\"Keyboard interruption in main thread... closing server.\")\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/content/InternVL-20240714/internvl_chat_llava/llava/utils.py\", line 83, in write\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     self.logger.log(self.log_level, line.rstrip())\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/logging/__init__.py\", line 1547, in log\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     self._log(level, msg, args, **kwargs)\n",
      "2024-07-15 12:46:46 | ERROR | stderr |   File \"/usr/local/lib/python3.10/logging/__init__.py\", line 1600, in _log\n",
      "2024-07-15 12:46:46 | ERROR | stderr |     def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False,\n",
      "2024-07-15 12:46:46 | ERROR | stderr | KeyboardInterrupt\n",
      "2024-07-15 12:46:46 | INFO | stdout | Killing tunnel 0.0.0.0:7860 <> https://0925111111d5cd1ae1.gradio.live\n",
      "^C\n"
     ]
    }
   ],
   "source": [
    "%cd /content/InternVL-20240714/internvl_chat_llava\n",
    "!python3 -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload --share"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "gpuType": "L4",
   "machine_shape": "hm",
   "provenance": [],
   "authorship_tag": "ABX9TyM+qI/Gq7K02lpG9LGGd0G5"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "23b2551bf1534455be6089f6cb561c14": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_349ef084cd784aabac3cc230cf015973",
       "IPY_MODEL_274d40f303c7454193f712253fca82db",
       "IPY_MODEL_4dd3619e5efc4ba58f68c45862366c94"
      ],
      "layout": "IPY_MODEL_4a0a9fa4d94c4f3fbd2b8ba7c82aed06"
     }
    },
    "349ef084cd784aabac3cc230cf015973": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_dd2343f590fa402a936b3945568a4df8",
      "placeholder": "​",
      "style": "IPY_MODEL_aef2e294b5d443f899bb7aed9e88053d",
      "value": "Fetching 22 files: 100%"
     }
    },
    "274d40f303c7454193f712253fca82db": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "FloatProgressModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_ddb8ccbd1d904d1d8dff9cc5a41a59ed",
      "max": 22,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_ae946ea039e7455dae0d21e9bfdefc8c",
      "value": 22
     }
    },
    "4dd3619e5efc4ba58f68c45862366c94": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "model_module_version": "1.5.0",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_216805c6420d4ad5baacf47cb91f9588",
      "placeholder": "​",
      "style": "IPY_MODEL_faf4c7f71d8d44db91ef6e50a9f31945",
      "value": " 22/22 [00:00&lt;00:00, 990.71it/s]"
     }
    },
    "4a0a9fa4d94c4f3fbd2b8ba7c82aed06": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "dd2343f590fa402a936b3945568a4df8": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "aef2e294b5d443f899bb7aed9e88053d": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "ddb8ccbd1d904d1d8dff9cc5a41a59ed": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ae946ea039e7455dae0d21e9bfdefc8c": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "216805c6420d4ad5baacf47cb91f9588": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "model_module_version": "1.2.0",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "faf4c7f71d8d44db91ef6e50a9f31945": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "model_module_version": "1.5.0",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
